package com.lxw.question;

public class Q03 {
    /**
     * 题目描述
     * 字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串，
     * 编写一个函数判定它们是否只需要一次(或者零次)编辑。
     */
    public static boolean oneEditAway(String first, String second) {

        //看了题解后写的答案
        if(first == null || second == null){
            return false;
        }

        if(Math.abs(first.length() - second.length()) > 1){
            return false;
        }

        int firstLen = first.length();
        int secondLen = second.length();

        //长度相等的情况
        if(firstLen == 1 && secondLen ==1){
            return true;
        }
        //保持first是长的那个字符串
        if(firstLen < secondLen){
            return oneEditAway(second,first);
        }


        //解决一个长度为零的问题
        if(secondLen == 0){
            return true;
        }

        for(int i = 0 ; i < secondLen ; i++){
            //从左边开始比较两个字符串的每一个字符
            if(first.charAt(i) != second.charAt(i)){
                //不相等的情况下，有两种情况。
                //1. 如果是长度相等的字符串，那么从下一位开始比较
                //2. 如果是长度不相等的字符串，那么从这一位进行下一轮比较
                if(firstLen == secondLen){
                    return first.substring(i+1).equals(second.substring(i+1)) ;
                } else {
                    //不相等的情况下从第二个字符串当前位进行substring比较的原因：如果从当前为截取和上面的相等的话，说明
                    //第二个字符串就是第一个字符与第一个不同。
                    return first.substring(i + 1).equals(second.substring(i));
                }
            }
        }
        return true;
    }


    public static void main(String[] args){
        boolean result = oneEditAway("","a");
        System.out.println(result+"777");
    }

}
